﻿/* =====================================================================================================
* FileName: AsyncSocketConnects            
* Created By: 马志
* Created Date: 2015年12月16日
* Email：hautmz@163.com
* Modified By:
* Modified Date:
* Copyright (c) 2010 - 2015 北京其乐融融科技有限公司
* ===================================================================================================== */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace PluginService.Common.Sockets
{
    public class AsyncSocketConnects<T> : 
        Dictionary<string, AsyncSocketConnect<T>> where T:class 
    {
        #region 变量定义

        ReaderWriterLockSlim _Locker = new ReaderWriterLockSlim();

        #endregion

        #region 公共函数

        public void Add(AsyncSocketConnect<T> value)
        {
            _Locker.EnterWriteLock();
            try
            {
                base.Add(value.ID, value);

            }
            finally
            {
                _Locker.ExitWriteLock();
            }
        }

        public new bool Remove(string key)
        {
            EnterWriteLock();
            try
            {
                return base.Remove(key);
            }
            finally
            {
                ExitWriteLock();
            }
        }

        public void EnterWriteLock()
        {
            _Locker.EnterWriteLock();
        }

        public void EnterReadLock()
        {
            _Locker.EnterReadLock();
        }

        public void ExitWriteLock()
        {
            _Locker.ExitWriteLock();
        }

        public void ExitReadLock()
        {
            _Locker.ExitReadLock();
        }

        #endregion

        #region 私有函数

        new void Add(string key, AsyncSocketConnect<T> value)
        {
            base.Add(key, value);
        }

        #endregion
    }
}